"""
@version:python3
@author:ll
@file:02-pyqt5-程序基本结构.py
@time:2022/1/31 0:54
"""

from PyQt5.Qt import *
import sys
# 0、导入需要的包和模块


# app = QApplication(sys.argv)
# 代码的执行方式：1、右击执行 2、命令行执行
# 以命令行执行的时候可以向代码中传入参数
# args = sys.argv
# print(args)
# if args[1] == "1":
#     print("xxx")
# else:
#     print("ooo")
# 例如执行 python .\02-pyqt5-程序基本结构.py 1 2 3
# 获得列表 ['.\\02-pyqt5-程序基本结构.py', '1', '2', '3']

app = QApplication(sys.argv)
# 1、创建一个应用程序对象
# print(app.arguments())
# print(qApp.arguments())
# 同样可以通过上述代码获得命令行传入的参数，app是本地变量，aApp是全局变量

# 2、控件操作
# 创建控件、设置控件、事件和信号的处理

# 2.1 创建控件
# 刚创建好一个控件之后（这个控件没有什么父控件），则把它当作顶层控件（窗口），系统会自动给这个窗口添加一些装饰（标题栏）
# 窗口控件具备一些特性（设置标题、图标）
window = QWidget()
# window = QPushButton()
# window = QLabel()
# 2.2 设置控件
window.setWindowTitle("社会我顺哥，人狠话不多")
window.resize(500,500)
window.move(400,200)

# 控件也可以作为一个容器（承载其他的控件）
# label = QLabel()
# label.setText("xxx")
# label.show()
# 顶级控件都有自己的窗口
label = QLabel(window) # label控件被添加到了window控件的内部
label.setText("hello world")
label.move(300,300)
# 2.3 展示控件 刚创建好一个控件之后（这个控件没有什么父控件），默认情况下不会被展示，只要手动调用show()方法才会显示
# 如果这个控件有父控件，那么一般情况下父控件显示之后，子控件也会自动显示
window.show()


# 3、应用程序的执行，进入到消息循环
sys.exit(app.exec_())
# app.exec_() 让整个程序开始执行并进入无限的消息循环，检测整个程序接收到的用户的交互信息
# 向系统表明程序的退出是正常退出还是由于bug退出


# 一个pyqt程序都需要一个应用程序对象，它包含主事件循环，在其中来自窗口系统和其它资源的所有事件被处理和调度
# 它也处理应用程序的初始化和结束，并且提供对话管理。它也处理绝大多数系统范围和应用程序范围的设置。
